import math

class TrueInclinationCalculator:
    """真倾角计算工具类

    提供地质工程中视倾角计算的核心算法方法
    """

    @staticmethod
    def calculate_view_inclination(depth, true_trend, true_angle, trajectory_azimuth):
        """计算沿井轨迹视倾角（核心算法）

        根据三维空间几何关系，通过真倾角计算沿特定轨迹方向的视倾角。
        公式来源：地质工程三维空间几何关系推导

        Args:
            depth (float): 测量点深度（单位：米），当前版本暂未参与计算
            true_trend (float): 地层真倾向（单位：度，0-360度范围）
            true_angle (float): 地层真倾角（单位：度，0-90度范围）
            trajectory_azimuth (float): 井轨迹方位角（单位：度，0-360度范围）

        Returns:
            float: 沿井轨迹方向的视倾角（单位：度），保留原始计算精度

        Note:
            - 当井轨迹方位与地层走向垂直时，视倾角等于真倾角
            - 当井轨迹方位与地层走向平行时，视倾角趋近于0度
        """
        # 计算方位角差值（转换为弧度）
        delta_azimuth = math.radians(true_trend - trajectory_azimuth)

        # 核心计算公式：tan(view_angle) = tan(true_angle) * cos(delta_azimuth)
        view_angle_rad = math.atan(
            math.tan(math.radians(true_angle)) * math.cos(delta_azimuth)
        )

        # 将弧度结果转换为角度值
        return math.degrees(view_angle_rad)

    @staticmethod
    def calculate_from_excel(depth, true_trend, true_angle, trajectory_azimuth, process_value):
        """Excel数据适配计算方法（预留扩展接口）

        为后续整合Excel数据预处理逻辑预留的扩展方法，当前版本直接调用核心算法。

        Args:
            process_value (float): 数据预处理参数（示例参数，可根据实际需求调整）

        Returns:
            float: 视倾角计算结果（单位：度）

        Todo:
            - 需要根据具体Excel数据结构添加数据清洗逻辑
            - 可扩展异常值过滤机制
            - 计划支持批量计算优化
        """
        # 当前直接调用核心算法，process_value参数暂未使用
        return TrueInclinationCalculator.calculate_view_inclination(
            depth, true_trend, true_angle, trajectory_azimuth
        )
